package com.chart.common.config;//package com.chart.common.config;
//
//import lombok.Data;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Configuration;
//
//@Configuration
//@Slf4j
//@Data
//public class WechatpayConfig {
//    // 商户ID
//    @Value("${wxpay.mch-id}")
//    private String mchId;
//
//    // 商户API证书序列号
//    @Value("${wxpay.mch-serial-no}")
//    private String mchSerialNo;
//
//    // 商户私钥文件
//    @Value("${wxpay.private-key-path}")
//    private String privateKeyPath;
//
//    // APIv3密钥
//    @Value("${wxpay.api-v3-key}")
//    private String apiV3Key;
//
//    // APPID
//    @Value("${wxpay.appid}")
//    private String appid;
//
//    // 接收结果通知地址
//    @Value("${wxpay.notify-domain}")
//    private String notifyDomain;
//
//
////
////    /**
////     * 获取HttpClient对象
////     * @return
////     */
////    @Bean
////    public CloseableHttpClient getVerifier(){
////        /**
////         * 首先，获取证书管理器的实例，用于管理微信支付平台的证书。
////         * 然后，向证书管理器增加需要自动更新平台证书的商户信息，包括商户号、商户私钥和API v3密钥。
////         * 接着，创建一个私钥签名器，用于对请求进行签名。
////         * 然后，创建一个身份认证对象，用于携带商户号和签名信息。
////         * 接着，从证书管理器中获取一个验签器，用于对响应进行验签。
////         * 然后，创建一个微信支付HTTP客户端构建器，用于设置商户信息和验签器。
////         * 最后，通过构建器构造一个HTTP客户端，用于发送请求和接收响应。
////         */
////        // 获取证书管理器实例
////        CertificatesManager certificatesManager = CertificatesManager.getInstance();
////
////        // 向证书管理器增加需要自动更新平台证书的商户信息
////        PrivateKey privateKey = null;
////        try {
////            // 拿到api v3密钥
////            privateKey = PemUtil.loadPrivateKey(new FileInputStream(privateKeyPath));
////        } catch (FileNotFoundException e) {
////            throw new RuntimeException("私钥文件不存在", e);
////        }
////        // 创建了一个私钥签名器
////        PrivateKeySigner privateKeySigner = new PrivateKeySigner(mchSerialNo, privateKey);
////
////        // 身份认证对象（签名）
////        WechatPay2Credentials wechatPay2Credentials = new WechatPay2Credentials(mchId, privateKeySigner);
////
////        try {
////            certificatesManager.putMerchant(mchId, wechatPay2Credentials, apiV3Key.getBytes(StandardCharsets.UTF_8));
////        } catch (Exception e) {
////            log.error("定时更新签名验证器错误：{}",e);
////            throw new RuntimeException(e);
////        }
////        // 从证书管理器中获取verifier
////        Verifier verifier = null;
////        try {
////            verifier = certificatesManager.getVerifier(mchId);
////        } catch (NotFoundException e) {
////            log.error("从证书管理器中获取verifier失败：{}",e);
////            throw new RuntimeException(e);
////        }
////        // 用于构造HttpClient
////        WechatPayHttpClientBuilder builder = WechatPayHttpClientBuilder.create()
////                .withMerchant(mchId, mchSerialNo,privateKey )
////                .withValidator(new WechatPay2Validator(verifier));
////
////        // 通过WechatPayHttpClientBuilder构造的HttpClient，会自动的处理签名和验签，并进行证书自动更新
////        CloseableHttpClient httpClient = builder.build();
////        return httpClient;
////    }
////
////
////    public CloseableHttpResponse execute(HttpPost httpPost) throws IOException {
////        // Create an HTTP client
////        CloseableHttpClient httpClient = HttpClients.createDefault();
////
////        try {
////            // Execute the HTTP POST request
////            CloseableHttpResponse response = httpClient.execute(httpPost);
////
////            // Optionally, you can log the response status code
////            log.info("HTTP Response Status Code: " + response.getStatusLine().getStatusCode());
////
////            // Read and log the response body (if needed)
////            String responseBody = EntityUtils.toString(response.getEntity());
////            log.info("HTTP Response Body: " + responseBody);
////
////            return response;
////        } catch (IOException e) {
////            log.error("HTTP POST request failed: " + e.getMessage());
////            throw e;
////        } finally {
////            // Close the HTTP client and release any system resources
////            httpClient.close();
////        }
////    }
//
//}